#include <stdio.h>
#define row 3
#define col 5
#define max(a, b) (a>b?a:b)

int xuansha(int k);//在函数原型中，虽然可以省略，但是最好不要省略，保持与函数定义的头一样。
int chakan(const double input[row][col]);//形参还是要表达完整数组的形态。
int pinjun(const double input[row][col]);
int qiuhe(const double input[row][col]);
int zuidazhi(const double input[row][col]);
int display(const double input[row][col]);


int main(int argc, char const *argv[])
{
	double input[row][col];
	


	for (int i = 0; i < row; ++i)//之前一直在顾虑for循环里是使用i++，还是++i，结果发现是一样的。
	{
		printf("第%d组：请输入五个数：\n", i+1);
		for (int j = 0; j < col; ++j)
		{
			printf("第%d组第%d个数:", i+1, j+1);
			scanf("%lf",*(input+i)+j);//与double类型对应的是%lf，之前用%f结果指针所指的内容根本不改变。
			//printf("%f\n", input[i][j]);
		}
	}
	for (int i = 0; i < row; ++i)
		{
			for (int j = 0; j < col; ++j)
			{
				printf("%lf\t", input[i][j]);
			}
		printf("\n");
		}
	display(input);

	return 0;
}

int xuansha(int k)
{
	int xuan;
//字符串时，要为'\0'留一位，否则在第55行的时候不会停止，出现第56行描述的情况。	
	const char zifu[4][5]={
		{"chec"},
		{"mean"},
		{"sum"},
		{"max"}
	};

//again1:printf("你想%.4s第几组数据啊？（输入5表示你要结束这个小程序）\n", zifu[k-1]);
again1:printf("你想%s第几组数据啊？（输入5表示你要结束这个小程序）\n", zifu[k-1]);
//其实这里用%.4s限定输出字符串的位数，如果没有.4，那么将会从zifu[k-1]处到数组结束全输出。
	printf("1.第一组\t2.第二组\n");
	printf("3.第三组\t4.所有组\n");
	scanf("%d", &xuan);

	switch (xuan)
	{
		case 1 : return xuan; 
//本来这后面都带break的，但是后来想了想，都return结束了，还break个毛啊。
		case 2 : return xuan; 
		case 3 : return xuan; 
		case 4 : return xuan; 
		case 5 : return 0;
		default : printf("说了要输入1234啊！\n");goto again1;
	}
}

int chakan(const double input[row][col])
{
	int xuan;
	int i;
	
	xuan=xuansha(1);
	if (xuan==0)
		return 0;
	else if (xuan<4)
	{
		for ( i = 0; i < col; ++i)
		{
			printf("%lf\n", input[xuan-1][i]);
		}
		printf("\n");
		return 0;
	}
	else if (xuan == 4)
	{
		for ( i = 0; i < row; ++i)
		{
			for (int j = 0; j < col; ++j)
			{
				printf("%lf\t", input[i][j]);
			}
		printf("\n");
		}
		return 0;
	}
	else return 0;
}

int pinjun(const double input[row][col])
{
	int xuan;
	double sum=0;
	double mean1=0;

	
	xuan=xuansha(2);
	if (xuan==0)
		return 0;
	else if (xuan<4)
	{
		for (int i = 0; i < col; ++i)
		{
			sum+= input[xuan-1][i];//还是要牢记数组的第一项是0。
		}
		mean1=sum/col;
		printf("第%d组的平均是：%lf\n",xuan, mean1);
		return 0;
	}
	else if (xuan == 4)
	{
		for (int i = 0; i < row; ++i)
		{
			for (int j = 0; j < col; ++j)
			{
				sum += input[i][j];
			}
		}
		mean1=sum/(col*row);
		printf("所有组的平均是：%lf\n", mean1);
		return 0;
	}
	else return 0;
}

int qiuhe(const double input[row][col])
{
	int xuan;
	double sum=0;

	xuan=xuansha(3);
	if (xuan==0)
		return 0;
	else if (xuan<4)
	{
		for (int i = 0; i < col; ++i)
		{
			sum+= input[xuan-1][i];
		}
		//mean1=sum/col;
		printf("第%d组的和是：%lf\n",xuan, sum);
		return 0;
	}
	else if (xuan == 4)
	{
		for (int i = 0; i < row; ++i)
		{
			for (int j = 0; j < col; ++j)
			{
				sum += input[i][j];
			}
		}
		//mean1=sum/(col*row);
		printf("所有组的和是：%lf\n", sum);
		return 0;
	}
	else return 0;
}

int zuidazhi(const double input[row][col])
{
	int xuan;
	double max1;

	xuan=xuansha(4);
	if (xuan==0)
		return 0;
	else if (xuan<4)
	{
		for (int i = 0; i < col; ++i)
		{
			max1=max(max1, input[xuan-1][i]);
		}
		
		printf("第%d组的最大值是：%lf\n",xuan, max1);
		return 0;
	}
	else if (xuan ==4)
	{
		for (int i = 0; i < row; ++i)
		{
			for (int j = 0; j < col; ++j)
			{
				max1=max(max1, input[i][j]);
			}
		}
		printf("所有组的最大值是：%lf\n", max1);
		return 0;
	}
	else return 0;
}

int display(const double input[row][col])
{
	int xuan1;
	int xuan2;
	/*char zifu[4][4]={
		{'c','h','e','c'},
		{'m','e','a','n'},
		{'s','u','m','!'},
		{'m','a','x','!'}
	};*/

again:printf("*******************************************\n");
	printf("**************这里是菜单啦！***************\n");
	printf("*******************************************\n");
	printf("你已经输入了三组数据了，现在你想对他们干嘛？（输入5表示你要结束这个小程序）\n");
	printf("1.查看一下\t2.求平均!\n");
	printf("3.求和!!\t4.最大值!\n");
	scanf("%d", &xuan1);
	switch (xuan1)
	{
		case 1 : chakan(input); break;
		//实参就直接写名字好了，就把实参内容全都放进去，如果只是使用该内容的一部分，在子函数中再选择使用，不用担心内存问题，毕竟传递的是指针。
		case 2 : pinjun(input); break;
		case 3 : qiuhe(input); break;
		case 4 : zuidazhi(input); break;
		case 5 : return 0;
		default : printf("说了要输入1234啊！\n");goto again;
	}
goto again;
}

